Active Directory

Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma

Microsoft, Exchange ve SharePoint gibi birçok uygulamasında kullanıcıların Active Directory (AD) ya da Azure Active Directory (AAD) (Entra ID) üzerinde yer alan profil fotoğraflarını kullanmasına olanak tanımaktadır. Bu fotoğraflar genellikle thumbnailPhoto attribute’u içerisinde saklanır.

Bu makalede, kullanıcı profil fotoğraflarını Active Directory’ye ekleme, toplu yapılandırma ve GPO aracılığıyla istemcilere dağıtma işlemlerini adım adım ele alacağız. Biz bu işlemi kullanırken Logon PS kullanacağız, kullanıcı Windows üzerinden her oturum açtığında AD üzerinde bulunan ThumbnailPhoto değerini okuyacak ve profil resmini gösterecek.

Active Directory Kullanıcısına Fotoğraf Ekleme

Active Directory Kullanıcı Fotoğrafı Ekleme Gereksinimleri

  • Format: JPEG veya BMP
  • Boyut: Maksimum 100KB
  • Çözünürlük: 96×96 piksel

Fotoğrafı yüklemeden önce, kullanıcıya ait thumbnailPhoto değeri ADUC > Attribute Editor üzerinden kontrol edilmelidir.

thumbnailPhoto
Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 15

Active Directory ThumbnailPhoto Değeri Boş Kullanıcıları Görüntüleme

Eğer Active Directory ortamınızda thumbnailPhoto değeri boş olan kullanıcıları listelemek isterseniz, aşağıdaki scripti kullanabilirsiniz.

Get-ADUser -Filter * -Properties thumbnailPhoto | Where-Object { -not $_.thumbnailPhoto } | Select-Object Name
thumbnailphoto none
Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 16

Active Directory Tekil Kullanıcıya Fotoğraf Ekleme

Active Directory ortamımızda bulunan tek bir kullanıcıya fotoğraf atamak isterseniz, aşağıdaki PowerShell scripti kullanabilirisiniz.

$photo = [byte[]](Get-Content C:\Photo\cozumpark.jpg -Encoding byte)
Set-ADUser cozumpark -Replace @{thumbnailPhoto=$photo}
thumbnailsingleobject
Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 17

Bu işlemden sonra ADUC üzerinden objeyi kontrol ettiğimiz zaman thumnailPhoto bölümünde değer olduğunu görebiliyoruz.

thumnailobjectattribute
Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 18

Active Directory Kullanıcılarına Toplu Fotoğraf Eklemek

Active Directory ortamımızda bulunan kullanıcılara toplu şekilde fotoğraf eklemek isterseniz, enterprise ürünler bulunduğu gibi PowerShell kullanarakda fotoğraf ekleyebiliriz.

Öncelikle CSV dosyası hazırlamamız gerekmektedir, oluşturacağımız CSV dosyası aşağıdaki gibi gözükmektedir.

Fotoğraflar ilgili ilgili kullanıcının ismini içermesi gerekmektedir.
AD_user,path_to_file
User1,C:\Photos\user1.jpg
User2,C:\Photos\user2.jpg

CSV dosyamızı hazırladıktan sonra aşağıdaki powershell komutlarını çalıştırarak CSV dosyamızda belirttiğimiz kullanıcılara fotoğraf ekleme işlemi tamamlanmış olacak.

Import-Csv C:\Photos\photos.csv | ForEach-Object {
    Set-ADUser -Identity $_.AD_user -Replace @{
        thumbnailPhoto = [byte[]](Get-Content $_.path_to_file -Encoding byte)
    }
}

Active Directory Kullanıcı Fotoğraflarını GPO ile Dağıtmak

Kullanıcı fotoğrafları için GPO hazırlamamız gerekmektedir, bu işlemle beraber kullanıcılarımıza hesap değiştirme izni vermemiz gerekmektedir. Bu işlemi GPO kullanarak Registry hazırlayarak sağlayacağız.

Bu işlem için yeni bir GPO oluşturacağım.

newgpo
Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 19

Oluşturduğumuz GPO’yu aşağıdaki yolu takip ederek düzenlememiz gerekmektedir:
Computer Configuration > Policies > Windows Settings > Security Settings > Registry

Registry – Add Key ile devam ediyoruz.

registrygpoaddkey
Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 20

Select Registry ile aşağıda belirttiğim anahtara erişim izni vermemiz gerekmektedir.

MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users
selectregistrykeygpo
Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 21

Database Security bölümünden Domain/Users grubuna Full Control yetkisi vermemiz gerekmektedir.

databasesecurity
Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 22

Yetki işlemini onayladıktan sonra “Add Object” penceresi üzerinden “Replace existing permissions on all subkeys with inheritable permissions” (Alt anahtarlarıdaki mevcut izni devrealınabilen izinlerle değiştir) seçeneğini işaretliyoruz ve OK butonu ile devam etmemiz gerekmektedir.

Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 23

Active Directory Kullanıcı Fotoğrafları için Group Policy Loopback Processing mode Yapılandırılması

Oluşturmuş olduğumuz Policy ile işlemlere devam ediyorum, kullanıcılar için gerekli yetkili Registry yapılandırılması ile sağlamıştım. Şimdi Group Policy Loopback Processing mode ile devam etmemiz gerekmektedir.

Loopback Processing Mode için aşağıdaki yolu takip etmemiz gerekmektedir;

Computer Configuration > Administrative Templates > System > Group Policy > Configure user Group Policy loopback processing mode

  • Enabled yapıyoruz ve Mode seçeneğini Merge olarak değiştiriyoruz.
loopbackprocessingmode
Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 24

Bu işlemlerden sonra açılış sırasında kullanıcıların ThumbnailPhoto değerini okuyacak scriptimizi yapılandırmamız gerekmektedir.

Script olmadan bu işlemi yapmak isterseniz tüm ortamınıza RSAT modulünü yüklemeniz gerekebilir, bu ortamınız için güvenilir olmadığı için ve Script RSAT modülü gerektirmediği için bu işlemimiz Script ile yapacağız.

Active Directory Kullanıcı Fotoğraflarını Oturum Açılışında Otomatik Yüklemek

RSAT kurulumu yerine bir PowerShell scripti kullanarak, kullanıcıların Active Directory üzerindeki thumbnailPhoto değerini alıp, bilgisayara profil fotoğrafı olarak atayabilirsiniz.

Active Directory Kullanıcı Fotoğraflarını Oturum Açma ekranında gösterme Scripti

  • Fotoğraf yolları registry’e yazılır.
  • Kullanıcının SID değeri alınır.
  • Fotoğraf farklı çözünürlüklerde C:\Users\Public\AccountPictures klasörüne kaydedilir.

Paylaştığım scripti her kullanıcın eriştiği bir paylaşım klasörüne (Örn: NETLOGON) kaydetmeniz gerekmektedir.

Function ResizeImage {
Param (
[Parameter(Mandatory = $True, HelpMessage = "image in byte")]
[ValidateNotNull()]
$imageSource,
[Parameter(Mandatory = $true, HelpMessage = "Betwwen 16 and 1000")]
[ValidateRange(16, 1000)]
$canvasSize,
[Parameter(Mandatory = $true, HelpMessage = "Between 1 and 100")]
[ValidateRange(1, 100)]
$ImgQuality = 100
)
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$imageBytes = [byte[]]$imageSource
$ms = New-Object IO.MemoryStream($imageBytes, 0, $imageBytes.Length)
$ms.Write($imageBytes, 0, $imageBytes.Length);
$bmp = [System.Drawing.Image]::FromStream($ms, $true)
# Image size after conversion
$canvasWidth = $canvasSize
$canvasHeight = $canvasSize
# Set picture quality
$myEncoder = [System.Drawing.Imaging.Encoder]::Quality
$encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1)
$encoderParams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter($myEncoder, $ImgQuality)
# Get image type
$myImageCodecInfo = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | Where-Object { $_.MimeType -eq 'image/jpeg' }
# Get aspect ration
$ratioX = $canvasWidth / $bmp.Width;
$ratioY = $canvasHeight / $bmp.Height;
$ratio = $ratioY
if ($ratioX -le $ratioY) {
$ratio = $ratioX
}
# Create an empty picture
$newWidth = [int] ($bmp.Width * $ratio)
$newHeight = [int] ($bmp.Height * $ratio)
$bmpResized = New-Object System.Drawing.Bitmap($newWidth, $newHeight)
$graph = [System.Drawing.Graphics]::FromImage($bmpResized)
$graph.Clear([System.Drawing.Color]::White)
$graph.DrawImage($bmp, 0, 0 , $newWidth, $newHeight)
# Create an empty stream
$ms = New-Object IO.MemoryStream
$bmpResized.Save($ms, $myImageCodecInfo, $($encoderParams))
# cleanup
$bmpResized.Dispose()
$bmp.Dispose()
return $ms.ToArray()
}
$ADUserInfo = ([ADSISearcher]"(&(objectCategory=User)(SAMAccountName=$env:username))").FindOne().Properties
$ADUserInfo_sid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
If ($ADUserInfo.thumbnailphoto) {
$img_sizes = @(32, 40, 48, 96, 192, 200, 240, 448)
$img_base = "C:\Users\Public\AccountPictures"
$reg_key = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\$ADUserInfo_sid"
If ((Test-Path -Path $reg_key) -eq $false) { New-Item -Path $reg_key } { write-verbose "Reg key exist [$reg_key]" }
Try {
ForEach ($size in $img_sizes) {
$dir = $img_base + "\" + $ADUserInfo_sid
If ((Test-Path -Path $dir) -eq $false) { $(New-Item -ItemType directory -Path $dir).Attributes = "Hidden" }
$file_name = "Image$($size).jpg"
$path = $dir + "\" + $file_name
Write-Verbose " Crete file: [$file_name]"
try {
ResizeImage -imageSource $($ADUserInfo.thumbnailphoto) -canvasSize $size -ImgQuality 100 | Set-Content -Path $path -Encoding Byte -Force -ErrorAction Stop
Write-Verbose " File saved: [$file_name]"
}
catch {
If (Test-Path -Path $path) {
Write-Warning "File exist [$path]"
}
else {
Write-Warning "File not exist [$path]"
}
}
$name = "Image$size"
try {
$null = New-ItemProperty -Path $reg_key -Name $name -Value $path -Force -ErrorAction Stop
}
catch {
Write-Warning "Reg key edit error [$reg_key] [$name]"
}
}
}
Catch {
Write-Error "Check permissions to files or registry."
}
}

Bu scripti bir paylaşımlı klasöre (örneğin \\domain\netlogon) kopyalayın ve GPO’ya ekleyin:

Oluşturmuş olduğumuz Policy ile düzenlemelere devam ediyorum, şimdi ilgili scripti Startup script olarak eklememiz gerekmektedir.

User Configuration > Windows Settings > Scripts (Logon)

Script Name: Paylaşım yolu girilmesi gerekmektedir.

PowerShell scripts logon
Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 25

Kullanıcı profil fotoğrafının doğru şekilde yüklendiğini görebilmek için oturumu iki kez açıp kapatmanız gerekebilir.

Active Directory Kullanıcısına Fotoğraf Ekleme İşleminin Doğrulanması

Fotoğraflar Windows kullanıcı girişi ekranında görüntülendikten sonra aşağıdaki yolları takip ederek doğrulama işlemi yapabilirsiniz

  • Regedit ile AccountPicture altında kayıtları kontrol edilir.
  • C:\Users\Public\AccountPictures klasöründeki fotoğraf dosyaları incelenebilir.

Windows Login ekranında yüklediğim fotoğrafı görebiliyorum.

image 12
Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 26

Regedit ile doğrulama yapmak isterseniz aşağıdaki yolu takip edebilirsiniz.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users
accountpicture
Active Directory Kullanıcı Fotoğrafını Windows Oturum Açma Görüntüsü Olarak Yapılandırma 27

Active Directory ortamınızda kullanıcı profil fotoğraflarını manuel ya da toplu olarak yükleyebilir, GPO üzerinden otomatik dağıtım yapabilir ve istemcilerde sorunsuz görünmesini sağlayabilirsiniz. Kullanıcı giriş ekranında fotoğrafların gözükmesini sağlayabilirsiniz, umarım faydalı bir makale olmuştur.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu